/**
 * 文件名：WidgetApplication.java
 *
 * 版本信息：v1.0
 * 日期：2013-6-22
 * Copyright  Corporation 2013 
 * 版权所有
 *
 */

package com.foreveross.bsl.mam.model.application;

import java.util.List;

import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import com.foreveross.bsl.mam.model.application.vo.WidgetVO;

/**
 * 此类描述的是：模块接口定义
 * 
 * @author: panhm@foreveross.com
 * @version: 2013-6-22 下午2:46:04
 */
@Path(value = "/widget")
public interface WidgetApplication {
	/**
	 * 此方法描述的是：保存一个实体对象
	 * 
	 * @author: panhm@foreveross.com
	 * @version: 2013-6-19 下午3:05:19
	 */
	@POST
	@Path("/add")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public WidgetVO saveEntity(WidgetVO entity);

	/**
	 * 此方法描述的是：更新实体对象
	 * 
	 * @author: panhm@foreveross.com
	 * @version: 2013-6-19 下午3:05:31
	 */
	@PUT
	@Path("/update/{id}")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public WidgetVO updateEntity(@PathParam("id") String id, WidgetVO entity);

	/**
	 * 此方法描述的是：删除一个实体对象
	 * 
	 * @author: panhm@foreveross.com
	 * @version: 2013-6-19 下午3:05:42
	 */
	@DELETE
	@Path("/delete/{id}")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public void deleteEntity(@PathParam("id") String id);

	/**
	 * 此方法描述的是：获取一个实体对象
	 * 
	 * @author: panhm@foreveross.com
	 * @version: 2013-6-19 下午3:05:55
	 */
	@GET
	@Path("/get/{id}")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public WidgetVO getEntity(@PathParam("id") String id);

	/**
	 * 此方法描述的是：根据类型查询所有模块
	 * 
	 * @author: panhm@foreveross.com
	 * @version: 2013-6-19 下午3:06:13
	 */
	@GET
	@Path("/findByCategoryId")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public List<WidgetVO> findByCategoryId(
			@QueryParam("categoryId") String categoryId);

	/**
	 * 此方法描述的是：模糊查询
	 * 
	 * @author: panhm@foreveross.com
	 * @version: 2013-6-19 下午3:06:13
	 */
	@GET
	@Path("/findByQuery")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public List<WidgetVO> findByQuery(
			@QueryParam("categoryId") String categoryId,
			@QueryParam("name") String name);

	/**
	 * 此方法描述的是：分页获取实体对象
	 * 
	 * @author: panhm@foreveross.com
	 * @version: 2013-6-19 下午3:06:26
	 */
	@GET
	@Path("/all")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public List<WidgetVO> findAll();

	/**
	 * 此方法描述的是：检查模块标识是否存在
	 * 
	 * @author: panhm@foreveross.com
	 * @version: 2013-6-19 下午3:06:26
	 */
	@GET
	@Path("/checkIdentity")
	@Produces({ MediaType.APPLICATION_JSON })
	public WidgetVO checkIdentity(@QueryParam("identify") String identify);

	/**
	 * 根据应用id查询所关联的模块集合
	 * 
	 * @param appid
	 * @return
	 */
	@GET
	@Path("/getWidgets")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public List<WidgetVO> getWidgetsForRbac(@QueryParam("appId") String appId);

	/**
	 * 检测名称是否存在
	 * 
	 * @param name
	 * @return
	 */
	@GET
	@Path("/name")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public WidgetVO checkName(@QueryParam("name") String name);

	/**
	 * 检测是否已经存在自动打开模块
	 * 
	 * @return
	 */
	@GET
	@Path("/autoShow")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public WidgetVO autoShow();

	/**
	 * 设置为不自动打开状态
	 * 
	 * @param widgetId
	 */
	@POST
	@Path("/autoShowSatus")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public void autoShowSatus(@QueryParam("widgetId") String widgetId);

	/**
	 * 供效能监控调用接口，获取所有模块
	 * 
	 * @author lizhifeng
	 * @return
	 */
	@GET
	@Path("/getModulars")
	@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
	public List<WidgetVO> getModulars();
}
